package cn.tedu.search.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

@Data
@Accessors(chain=true)   // 支持链式set赋值
@AllArgsConstructor      // 自动生成全参构造器
@NoArgsConstructor       // 自动生成无参构造器

// @Document注解标记当前类是ES框架对应的实体类
// 属性indexName指定ES中对应索引的名称,运行时,如果这个索引不存在,SpringData会自动创建这个索引
@Document(indexName = "items")
public class Item implements Serializable {

    // SpringData通过@Id注解标记当前实体类的主键属性
    @Id
    private Long id;
    // @Field注解是SpringData提供的标记普通属性的注解
    // type用于指定属性的类型,FieldType是一个枚举,其中.Text指支持分词的字符串类型
    // 如果是需要中文分词的,还需要设置中文分词器
    @Field(type = FieldType.Text,
            analyzer = "ik_max_word",
            searchAnalyzer = "ik_max_word")
    private String title;
    // Keyword类型指不分词的字符串类型
    @Field(type = FieldType.Keyword)
    private String category;
    @Field(type = FieldType.Keyword)
    private String brand;
    @Field(type = FieldType.Double)
    private Double price;
    // imgPath是图片路径,路径不会称为搜索条件,所以这个列不需要创建索引,以节省空间
    // index = false就是不创建索引的设置
    // 但是需要注意,虽然不创建索引,但是ES还是保存这个数据的
    @Field(type = FieldType.Keyword,index = false)
    private String imgPath;

    // images/2022/12/30/18239adc-8ae913-abbf91.jpg



}
